﻿Imports System.Data.SqlClient
Imports extranet.BE
Imports MySql.Data.MySqlClient

Public Class DAUsuario
  Dim objBD As New BancoDeDados
  Public objQuery As New BEQuery

  Sub New()
  End Sub

  Sub New(ByVal booCondicaoSimilar As Boolean)
    objQuery.Where.CondicaoSimilar = booCondicaoSimilar
  End Sub

  Public Sub Cadastra(ByRef objBEUsuario As BEUsuario)
    Dim strFranquia As String = "NULL"
    Dim strGrupoAcesso As String = "NULL"
    Try
      objBD.duplicaAspasSimples(objBEUsuario, GetType(BEUsuario))
      With objBEUsuario
        If .Franquia IsNot Nothing AndAlso .Franquia.IdFranquia > 0 Then strFranquia = .Franquia.IdFranquia.ToString()
        If .GrupoAcesso IsNot Nothing AndAlso .GrupoAcesso.IdGrupo > 0 Then strGrupoAcesso = .GrupoAcesso.IdGrupo.ToString()
        objBD.ExecutaNonQuery("INSERT INTO ext_usuario (nome, avatar, cpf, id_Franquia, id_grupo_acesso, " & _
                                                       "usuario, pais, uf, cidade, cep, logradouro, email) " & _
                              "VALUES ('" & .Nome & "', '" & _
                                            .Avatar & "', '" & _
                                            .Cpf & "', " & _
                                            strFranquia & ", " & _
                                            strGrupoAcesso & ", '" & _
                                            .Usuario & "', '" & _
                                            .Pais & "', '" & _
                                            .Uf & "', '" & _
                                            .Cidade & "', '" & _
                                            .Cep & "', '" & _
                                            .Logradouro & "', '" & _
                                            .Email & "');")
      End With
    Catch ex As ApplicationException
      Throw New ApplicationException("extranet.DA.DAUsuario.Cadastra(): " & ex.Message)
    End Try
  End Sub

  Public Sub Atualiza(ByVal objBEUsuario As BEUsuario)
    Dim strFranquia As String = "NULL"
    Dim strGrupoAcesso As String = "NULL"
    Try
      objBD.duplicaAspasSimples(objBEUsuario, GetType(BEUsuario))
      With objBEUsuario
        If .Franquia IsNot Nothing AndAlso .Franquia.IdFranquia > 0 Then strFranquia = .Franquia.IdFranquia.ToString()
        If .GrupoAcesso IsNot Nothing AndAlso .GrupoAcesso.IdGrupo > 0 Then strGrupoAcesso = .GrupoAcesso.IdGrupo.ToString()
        objBD.ExecutaNonQuery("UPDATE ext_usuario " & _
                              "SET nome='" & .Nome & "', " & _
                                  "cpf='" & .Cpf & "', " & _
                                  "avatar='" & .Avatar & "', " & _
                                  "id_Franquia=" & strFranquia & ", " & _
                                  "id_grupo_acesso=" & strGrupoAcesso & ", " & _
                                  "usuario='" & .Usuario & "', " & _
                                  "pais='" & .Pais & "', " & _
                                  "uf='" & .Uf & "', " & _
                                  "cidade='" & .Cidade & "', " & _
                                  "cep='" & .Cep & "', " & _
                                  "logradouro='" & .Logradouro & "', " & _
                                  "email='" & .Email & "' " & _
                              "WHERE usuario='" & .Usuario & "';")
      End With
    Catch ex As ApplicationException
      Throw New ApplicationException("extranet.DA.DAUsuario.Atualiza(): " & ex.Message)
    End Try
  End Sub

  Public Sub AtualizaSenha(ByVal objBEUsuario As BEUsuario)
    Try
      With objBEUsuario
        objBD.ExecutaNonQuery("UPDATE ext_usuario " & _
                              "SET senha='" & .Senha & "' " & _
                              "WHERE usuario='" & .Usuario & "';")
      End With
    Catch ex As ApplicationException
      Throw New ApplicationException("extranet.DA.DAUsuario.AtualizaSenha(): " & ex.Message)
    End Try
  End Sub

  Public Sub Exclui(ByVal objBEUsuario As BEUsuario)
    Try
      objBD.duplicaAspasSimples(objBEUsuario, GetType(BEUsuario))
      objBD.ExecutaNonQuery("DELETE FROM ext_usuario WHERE usuario='" & objBEUsuario.Usuario & "';")
    Catch ex As ApplicationException
      Throw New ApplicationException("extranet.DA.DAUsuario.Exclui(): " & ex.Message)
    End Try
  End Sub

  Public Function CpfExiste(ByVal objBEUsuario As BEUsuario) As Boolean
    Dim booCpfExiste As Boolean = False
    Dim objBEUsuarios As List(Of BEUsuario) = New List(Of BEUsuario)
    Dim objDS As DataSet
    Try
      objBD.duplicaAspasSimples(objBEUsuario, GetType(BEUsuario))
      objDS = objBD.ExecutaQuery("SELECT * FROM ext_usuario WHERE cpf='" & objBEUsuario.Cpf & "'")
      If objDS.Tables(0).Rows.Count = 0 Then
        objDS = objBD.ExecutaQuery("SELECT * FROM ext_candidatos WHERE cpf='" & objBEUsuario.Cpf & "'")
      End If
      booCpfExiste = (objDS.Tables(0).Rows.Count > 0)
    Catch ex As ApplicationException
      Throw New ApplicationException("extranet.DA.DAUsuario.CpfExiste(): " & ex.Message)
    End Try
    Return booCpfExiste
  End Function

  Public Function UsuarioExiste(ByVal objBEUsuario As BEUsuario) As Boolean
    Dim booUsuarioExiste As Boolean = False
    Dim objBEUsuarios As List(Of BEUsuario) = New List(Of BEUsuario)
    Dim objDS As DataSet
    Try
      objBD.duplicaAspasSimples(objBEUsuario, GetType(BEUsuario))
      objDS = objBD.ExecutaQuery("SELECT * FROM ext_usuario WHERE usuario='" & objBEUsuario.Usuario & "'")
      If objDS.Tables(0).Rows.Count = 0 Then
        objDS = objBD.ExecutaQuery("SELECT * FROM ext_candidatos WHERE login='" & objBEUsuario.Usuario & "'")
      End If
      booUsuarioExiste = (objDS.Tables(0).Rows.Count > 0)
    Catch ex As ApplicationException
      Throw New ApplicationException("extranet.DA.DAUsuario.UsuarioExiste(): " & ex.Message)
    End Try
    Return booUsuarioExiste
  End Function

  Public Function SelecionaUsuario(ByVal objBEUsuario As BEUsuario) As BEUsuario
    Dim objBEUsuarios As List(Of BEUsuario) = New List(Of BEUsuario)
    Try
      objQuery.Where.CondicaoSimilar = False
      objBEUsuarios = SelecionaUsuarios(objBEUsuario)
      If objBEUsuarios.Count > 0 Then
        objBEUsuario = objBEUsuarios(0)
      Else
        objBEUsuario = Nothing
      End If
    Catch ex As ApplicationException
      Throw New ApplicationException("extranet.DA.DAUsuario.SelecionaUsuario(): " & ex.Message)
    End Try
    Return objBEUsuario
  End Function

  Public Function SelecionaUsuarios(ByVal objBEUsuario As BEUsuario) As List(Of BEUsuario)
    Dim objBEUsuarios As List(Of BEUsuario) = New List(Of BEUsuario)
    Try
      objBD.duplicaAspasSimples(objBEUsuario, GetType(BEUsuario))
      objQuery._Select = "SELECT * FROM ext_usuario"
      If objBEUsuario IsNot Nothing Then
        If objBEUsuario.Franquia IsNot Nothing AndAlso objBEUsuario.Franquia.IdFranquia > 0 Then _
          objQuery.Where.AdicionarCondicaoWhere("id_franquia", objBEUsuario.Franquia.IdFranquia, False)
        If objBEUsuario.GrupoAcesso IsNot Nothing AndAlso objBEUsuario.GrupoAcesso.IdGrupo > 0 Then _
          objQuery.Where.AdicionarCondicaoWhere("id_grupo_acesso", objBEUsuario.GrupoAcesso.IdGrupo, False)
        objQuery.Where.AdicionarCondicaoWhere("nome", objBEUsuario.Nome)
        objQuery.Where.AdicionarCondicaoWhere("cidade", objBEUsuario.Cidade)
        objQuery.Where.AdicionarCondicaoWhere("usuario", objBEUsuario.Usuario)
        objQuery.Where.AdicionarCondicaoWhere("senha", objBEUsuario.Senha)
        objQuery.Where.AdicionarCondicaoWhere("cpf", objBEUsuario.Cpf)
      End If
      objBEUsuarios = SelecionaUsuarios()
    Catch ex As ApplicationException
      Throw New ApplicationException("extranet.DA.DAUsuario.SelecionaUsuarios(): " & ex.Message)
    End Try
    Return objBEUsuarios
  End Function

  Private Function SelecionaUsuarios() As List(Of BEUsuario)
    Dim objBEUsuarios As List(Of BEUsuario) = New List(Of BEUsuario)
    Try
      Using objSQLCommand As MySqlCommand = New MySqlCommand(objQuery.Query, BancoDeDados.ConnectionInstance())
        Using objSQLDReader As MySqlDataReader = objSQLCommand.ExecuteReader()
          While objSQLDReader.Read()
            Dim objBEUsuario As New BEUsuario()
            Dim strGrupoAcesso As String
            Dim strFranquia As String
            With objBEUsuario
              .Nome = objSQLDReader("nome").ToString()
              .Avatar = objSQLDReader("avatar")
              .Cpf = objSQLDReader("cpf").ToString()
              .Usuario = objSQLDReader("usuario").ToString()
              .Senha = objSQLDReader("senha").ToString()
              .Pais = objSQLDReader("pais")
              .Uf = objSQLDReader("uf")
              .Cidade = objSQLDReader("cidade")
              .Cep = objSQLDReader("cep")
              .Logradouro = objSQLDReader("logradouro")
              .Email = objSQLDReader("email")
              strGrupoAcesso = objSQLDReader("id_grupo_acesso").ToString()
              strFranquia = objSQLDReader("id_Franquia").ToString()

              .GrupoAcesso = New BEGrupoAcesso(Integer.Parse(IIf(strGrupoAcesso.Length > 0, strGrupoAcesso, "0")))
              .Franquia = New BEFranquia(Integer.Parse(IIf(strFranquia.Length > 0, strFranquia, "0")))
            End With
            objBEUsuarios.Add(objBEUsuario)
          End While
        End Using
      End Using
    Catch ex As ApplicationException
      Throw New ApplicationException("extranet.DA.DAUsuario.SelecionaUsuarios(): " & ex.Message)
    End Try
    Return objBEUsuarios
  End Function

End Class
